안전하지 않은 콘텐츠 프로바이더 접근
컨텐츠 프로바이더란?
안드로이드에서 프로바이더는 애플리케이션 사이의 데이터 교환 연결 통로이다.
각종 설정 값 및 DB에 접근하는 식으로 사용된다.
컨텐츠 프로바이더에 접근하기 위해선 프로바이더의 주소인 URI와 리졸버가 필요하다.
컨텐츠 프로바이더 주소는 content://authority/path와 같은 형식으로 되어있다.
프로바이더의 authority는 고유 주소이고, path는 데이터 위치 정보이다.
취약점 진단
AndroidManifest.xml을 살펴보면 <provider>가 존재하는데 android:exported 값이 true로 설정되어 있기 때문에 외부에서 insecurebankv2의 어플의 내부 저장소로 접근이 가능하다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2Fe2d284b6-2b77-44c0-8888-356b488b1564%2FUntitled.png?table=block&id=b33ae2a4-c3d2-4d6d-a309-a4b5c81124cb&cache=v2)
com.android.insecurebankv2.TrackUserContentProvider의 코드를 살펴보면 URI를 얻을 수 있다.
URI :
content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
따라서 컨텐츠 프로바이더에 접근을 통해 내부 컨텐츠를 볼 수 있다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F75c2af7d-2bd9-4864-96f4-8125034ca878%2FUntitled.png?table=block&id=eeb89ef5-e092-407b-b985-10abebb47430&cache=v2)
ADB를 통한 접근
ADB의 content query를 사용하면 데이터를 열람 가능하다.
adb shell su content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
출력 된 데이터에는 로그인한 유저들의 이름이 저장되는 것을 볼 수 있다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2Fe6ca58d9-5656-40ff-a7f6-0a4398f62821%2FUntitled.png?table=block&id=54d572c3-c8c1-410f-a114-cecb8209b6b0&cache=v2)
Drozer를 통한 접근
Drozer는 컨텐츠 프로바이더 uri 탐지 기능을 제공한다.
해당 명령어를 통해 URI 탐지 결과 Accessible content URIs가 나오는 것을 볼 수 있다.
run scanner.provider.finduris -a com.android.insecurebankv2
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F27160006-637e-4378-a63a-52912e28bffd%2FUntitled.png?table=block&id=ded9f081-e47c-4b2c-b947-0594db0e1ba8&cache=v2)
해당 명령어를 통해 URI를 조회 할 수 있다.
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F63f2c496-086c-479a-b7e5-87e510be3d69%2FUntitled.png?table=block&id=283cf7c7-1e75-43f4-9956-9c208919c51c&cache=v2)
대응방안
브로드캐스트 리시버, 액티비티와 같이 프로바이더 또한 android:exported의 값을 false로 변경하여 외부 접근을 보안 할 수 있다.